Lze ve FB 1.5 prevest tabulku z radku na sloupce?
Otázka od: little_bobes@centrum.cz
26. 8. 2004 12:50
Zdravim,
predem se omlouvam za krkolomny subjekt, ale nevim, jak jinat toto nazvat.
Dostala se mi do ruky zhruba nasledujici databaze (FB 1.5):
T_SEZNAM_KODU
KOD SL1 SL2 ID_1
==== === === ===
POL1 neco neco 1
POL2 neco neco 2
POL3 neco neco 3
...
T_SEZNAM_VELICIN
VELICINA HODNOTA ID_2
======== ======== ===
BARVA ZELENA 11
BARVA BILA 12
VYROBCE XY123 13
PRUREZ 10 14
...
T_SEZNAM_TYPU
TYP ID_3
==== ===
KABEL 21
MOTOR 22
...
T_PRIRAZENI_TYP_VELICINA
S_ID_3 S_ID_2
===== =====
21 11
21 13
21 14
22 12
22 13
...
T_PROPOJ_KOD_TYP
S_ID_1 S_ID_3
===== =====
1 21
3 22
...
Nyni bych potreboval ciste pomoci SQL (nejakou procedurou) vytvorit
nasledujici vystup (napr. pro ID_3 = 21)
KOD SL1 SL2 ID_1 BARVA VYROBCE PRUREZ
==== === === === ====== ======== =======
POL1 neco neco 1 ZELENA XY123 10
Je mi jasne, ze pro kazde ID_3 muze byt pocet velicin ruzny, ale ja to
potrebuji vzdy pouze pro jedno ID_3.
Je vubec toto ciste pomoci SQL mozne?
Nebo obecneji: lze si v SQL vytvorit z jednotlivych radku sloupce?
(v T_SEZNAM_VELICIN je ve VELICINA jmeno sloupce a v HODNOTA je jeho hodnota
a ja bych zadal pouze: select * from nejaka_procedura_nebo_neco
(jako_parametr_ID_3_cislo_21) ).
Diky i za sebemensi rady a nazory.
S pozdravem
Bob (D4 c/s, FB1.5)
Odpovedá: Slavomir Skopalik
26. 8. 2004 13:43
> Nebo obecneji: lze si v SQL vytvorit z jednotlivych radku
> sloupce? (v T_SEZNAM_VELICIN je ve VELICINA jmeno sloupce a v
> HODNOTA je jeho hodnota a ja bych zadal pouze: select * from
> nejaka_procedura_nebo_neco
> (jako_parametr_ID_3_cislo_21) ).
Moc te sice nechapu, ale zkusim odpovedet.
Pokud chces mit dynamicky pocet sloupcu, tak musis dynamicky generovat
dotaz.
Pak to samozrejme jde, napriklad takto:
SELECT
( SELECT tValue FROM table2 WHERE tKye='PRUMER' AND id=T1.id),
( SELECT tValue FROM table2 WHERE tKye='PLOCHA' AND id=T1.id),
( SELECT tValue FROM table2 WHERE tKye='xxx' AND id=T1.id),
( SELECT tValue FROM table2 WHERE tKye='yyy' AND id=T1.id)
FROM table1 T1 WHERE id=zzz
nebo obdobne
pokud je tKye primarni klic.
SELECT
( SELECT tValue FROM table2 WHERE tKye='PRUMER' ),
( SELECT tValue FROM table2 WHERE tKye='PLOCHA' ),
( SELECT tValue FROM table2 WHERE tKye='xxx'),
( SELECT tValue FROM table2 WHERE tKye='yyy')
FROM rdb$database
Je to odpoved ?
Slavek
Odpovedá: Lstiburek Pavel
26. 8. 2004 15:37
To co chces je transpozice tabulky, v FB urcite nejde (nejake nastroje jsou v
ORACLE a neco snad v Accessu).
Pokud to lze udelat na klientovi, zkus se podivat na ActiveX PivotTable.
Pavel